#include<iostream>
#include<cstdio>
#include<cstring>

using namespace std;
const int N = 10;

char g[N][N], tg[N][N];
int dis[4][2] = {{-1, 0}, {0, -1}, {0, 1}, {1, 0}};

void turn(int x, int y){
    if(g[x][y] == '0') g[x][y] = '1';
    else g[x][y] = '0';
    
    
    for(int i = 0; i < 4; i ++){
        int nx = x + dis[i][0], ny = y + dis[i][1];
        if(nx < 0 || nx > 4 || ny < 0 || ny > 4) continue;
        if(g[nx][ny] == '0') g[nx][ny] = '1';
        else g[nx][ny] = '0';
    }
}

void solve(){
    int res = 10;
    for(int i = 0; i < 5; i ++) cin >> tg[i];
    
    
    
    for(int i = 0; i < 32; i ++){
        memcpy(g, tg, sizeof tg);
        int cnt = 0;
        for(int j = 0; j < 5; j ++){
            if(i >> j & 1){ 
                turn(0, j);
                cnt ++;
            }
        }
        
        for(int j = 0; j < 4; j ++){
            for(int k = 0; k < 5; k ++){
                if(g[j][k] == '0'){
                    turn(j + 1, k);
                    cnt ++;
                }
            }
        }
        
        bool success = true;
        
        for(int j = 0; j < 5; j ++){
            if(g[4][j] == '0') success = false;
        }
        
        if(success && res > cnt){
            res = cnt;
        }
        
        
    }
    
    if(res > 6) res = -1;
    
    cout << res << '\n';
    
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    int T;
    cin >> T;
    while(T--){
        solve();
    }
    
    return 0;
}